home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 23
/
AACD 23.iso
/
AACD
/
Online
/
opennap
/
setup.c
< prev
next >
Wrap
C/C++ Source or Header
|
2001-06-08
|
6KB
|
242 lines
/* Copyright (C) 2000-1 drscholl@users.sourceforge.net
This is free software distributed under the terms of the
GNU Public License. See the file COPYING for details.
$Id: setup.c,v 1.5 2001/02/15 08:39:45 drscholl Exp $ */
/* Modified 29/05/01 : Moved #include <sys/types.h> above #include
for Amiga port : <sys/stat.h> so that the types used in sys/types.h are
typedef'd beforehand
Added include "confdefs.h" since we are not using the
CONFIGURE script
Removed default SHAREDIR, since we can't really assume
a default directory on the Amiga
*/
#include "confdefs.h"
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
/*#include <sys/types.h>*/
#include <fcntl.h>
#ifndef WIN32
#include <unistd.h>
#define MKDIR(a,b) mkdir(a,b)
#define DIRSEP '/'
#else
#include <windows.h>
#include <direct.h>
#include <io.h>
#define MKDIR(a,b) mkdir(a)
#define F_OK 00
#define DIRSEP '\\'
#define S_IRUSR _S_IREAD
#define S_IWUSR _S_IWRITE
#endif
/* opennap installation program */
#if WIN32
#define EXT ".exe"
#include "opennap.h"
#else
#define EXT ""
#endif /* WIN32 */
static void
usage (void)
{
printf ("usage: setup%s [ -h ] [ -v ]\n", EXT);
puts (" -h display this help message");
puts (" -v display the version");
exit (0);
}
static void
version (void)
{
printf ("%s setup%s %s", PACKAGE, EXT, VERSION);
exit (0);
}
static void
prompt (const char *str, const char *def, char *buf, int buflen)
{
char *p;
buf[buflen - 1] = 0;
while (1)
{
printf ("%s? [%s]: ", str, def ? def : "<no default>");
fflush (stdout);
if (!fgets (buf, buflen - 1, stdin))
{
puts ("EOF");
exit (1);
}
if (buf[0] == '\n' || buf[0] == '\r')
{
if (def)
{
strncpy (buf, def, buflen - 1);
return;
}
}
else
{
p = strpbrk (buf, " \r\n");
*p = 0;
if (buf[0])
{
return;
}
}
}
}
int
main (int argc, char **argv)
{
int i;
int fd;
char path[256];
char buf[256];
char nick[64];
char pass[64];
char email[64];
FILE *fp;
while ((i = getopt (argc, argv, "hv")) != -1)
{
switch (i)
{
case 'v':
version ();
break;
case 'h':
default:
usage ();
}
}
/* ensure that the configuration directory exists */
/* strcpy (path, SHAREDIR);
puts ("Checking for OpenNap configuration directory...");
if (access (path, F_OK))
{
if (errno != ENOENT)
perror (path); */
do
{
prompt ("Where should I install OpenNap", "", path,
sizeof (path));
if (MKDIR (path, S_IRWXU))
perror (path);
}
while (access (path, F_OK));
printf ("Created %s\n", path);
/* }*/
/* directory is created at this point */
/* check to see if the users file exists */
puts ("Checking for OpenNap user database...");
snprintf (buf, sizeof (buf), "%s%cusers", path, DIRSEP);
if (access (buf, F_OK))
{
if (errno != ENOENT)
{
perror (buf);
exit (1);
}
/* prompt the user for the elite login */
prompt ("Enter nickname for server owner (elite)", 0, nick,
sizeof (nick));
prompt ("Enter password for nickname", 0, pass, sizeof (pass));
prompt ("Enter email address", "email@here.com", email,
sizeof (email));
/* write out the file */
fd = open (buf, O_WRONLY | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
if (fd < 0)
{
perror ("open");
exit (1);
}
fp = fdopen (fd, "w");
if (!fp)
{
perror (buf);
exit (1);
}
fprintf (fp, "%s %s %s Elite 0 0", nick, pass, email);
if (fclose (fp))
{
perror ("fclose");
exit (1);
}
printf ("Created %s\n", buf);
}
/* if opennap is installed other than in the default location, set
up a config file with the proper config_dir variable */
/* if (strcmp (path, SHAREDIR) != 0)
{*/
snprintf (buf, sizeof (buf), "%s%cconfig", path, DIRSEP);
if (access (buf, F_OK))
{
if (errno != ENOENT)
{
perror (buf);
exit (1);
}
fd = open (buf, O_WRONLY | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
if (fd < 0)
{
perror ("open");
exit (1);
}
fp = fdopen (fd, "w");
if (!fp)
{
perror ("fdopen");
exit (1);
}
fprintf (fp, "# auto generated by %s setup%s %s\n\n", PACKAGE,
EXT, VERSION);
/* fprintf (fp, "# package was configured to install in %s\n",
SHAREDIR);*/
fprintf(fp, "# SHAREDIR not supported in this version\n");
fprintf (fp, "# but OpenNap is installed here:\n");
fprintf (fp, "config_dir %s\n", path);
fclose (fp);
printf ("Created %s\n", buf);
}
#if WIN32
/* create a batch file to easily launch the server */
snprintf (buf, sizeof (buf), "%s\\launch.bat", path);
fp = fopen (buf, "w");
if (!fp)
{
perror (buf);
exit (1);
}
fprintf (fp, "%s\\opennap.exe -c %s\\config", path, path);
fclose (fp);
printf ("Created %s\n", buf);
printf ("You can start the server by running %s\\launch.bat\n", path);
#endif /* WIN32 */
/* }
else
puts
("OpenNap is installed in default directory, no config file created"); */
puts ("Congratulations! OpenNap is now installed");
exit (0);
}